package com.testing.class10;

import com.testing.class9.Animal;
import com.testing.class9.Bird;
import com.testing.class9.Mamals;

public class MultiTest {
    public static void main(String[] args) {
        //父类引用指向子类对象。
        //向上转型。
        Animal an=new Mamals() ;
        Animal bi=new Bird();
//        ((Bird)bi).hunting();
        //继承，以及重写。
        //同样都是动物对象，同是调用eat方法，产生了不一样的结果。
        an.eat();
        an.run();
        bi.eat();
        bi.run();
        //向上转型之后，对象会隐藏子类扩展的方法和变量。
//        an.birth();
        System.out.println(an.kind);
//        System.out.println(an.legs);

        //子类引用指向父类对象是不行的。
//        Bird bird=new Animal();


        //将向上转型产生的父类对象，重新转换为子类对象，则叫向下转型。
        Bird bird=(Bird)bi;
        //向下转型之后，能够重新使用子类中定义的新方法。
        bird.fly();
        //注意.操作的运算优先级最高，所以使用的时候，提高强制转换的优先级，先转换为bird再调用。
        ((Bird)bi).fly();
        System.out.println(((Bird) bi).kind);
        //原本是哺乳动物的对象，转换成鸟类，是不行的。
//        Bird ma= (Bird)an;




    }
}
